home *** CD-ROM | disk | FTP | other *** search
- ;
- ; Fichero: STRINGS.ASM
- ;
- ; Versi≤n: 1.0
- ; Autor: Antonio M. EstΘvez Lorenzo
- ; Prop≤sito: Funciones para el manejo de cadenas
- ;
- ; Para ensamblar: TASM /ml strings
- ; /ml -> Sensible a may·sculas/min·sculas
- ;
-
- .MODEL large,C
-
-
- EXTRN pascal @$bnew$qui: PROC
-
- ENTRADA MACRO
- PUSH DS
- PUSH SI
- PUSH DI
- ENDM
-
- SALIDA MACRO
- POP DI
- POP SI
- POP DS
- RET
- ENDM
-
- LOCALS @@
-
- .CODE
-
-
- NewStr PROC C Cad: DWORD
- PUBLIC NewStr
- ENTRADA
-
- LDS SI,Cad
- XOR CX,CX
- CLD
- @@1: INC CX
- LODSB
- OR AL,AL
- JNZ @@1
- PUSH CX
- CALL @$bnew$qui
- POP CX
- MOV DI,AX
- MOV ES,DX
- MOV BX,AX
- OR BX,DX
- JZ @@2
- LDS SI,Cad
- CLD
- REP MOVSB
- @@2:
- SALIDA
- NewStr ENDP
-
- StrCpy PROC C Dest: DWORD, Orig: DWORD
- PUBLIC StrCpy
- ENTRADA
-
- LDS SI,Orig
- LES DI,Dest
- CLD
- @@1: LODSB
- STOSB
- OR AL,AL
- JNZ @@1
-
- SALIDA
- StrCpy ENDP
-
-
- StrMov PROC C Dest: DWORD, Orig: DWORD, Long: WORD
- PUBLIC StrMov
- ENTRADA
-
- LDS SI,Orig
- LES DI,Dest
- MOV CX,Long
- CLD
- OR CX,CX
- JZ @@1
- DEC CX
- REP MOVSB
- @@1: XOR AL,AL
- STOSB
-
- SALIDA
- StrMov ENDP
-
- StrUne PROC C Dest: DWORD, Str1: DWORD, Str2: DWORD
- PUBLIC StrUne
- ENTRADA
-
- LES DI,Dest
- LDS SI,Str1
- CLD
- @@1: LODSB
- OR AL,AL
- JZ @@2
- STOSB
- JMP @@1
- @@2: LDS SI,Str2
- @@3: LODSB
- STOSB
- OR AL,AL
- JNZ @@3
-
- SALIDA
- StrUne ENDP
-
- StrEqu PROC C Str1: DWORD, Str2: DWORD
- PUBLIC StrEqu
- ENTRADA
-
- LDS SI,Str1
- LES DI,Str2
- MOV AX,DS
- OR AX,SI
- JZ @@0
- MOV AX,ES
- OR AX,DI
- JZ @@0
- @@1: LODSB
- CMP AL,32
- JZ @@1
- @@2: MOV CL,ES:[DI]
- INC DI
- CMP CL,32
- JZ @@2
- MOV CH,AL
- JCXZ @@3
- OR CX,2020H
- CMP CL,CH
- JE @@1
- @@0: XOR AX,AX
- JMP SHORT @@4
- @@3: MOV AX,1
- @@4:
- SALIDA
- StrEqu ENDP
-
- StrSep PROC C Str1: DWORD, Str2: DWORD, Sep: BYTE
- PUBLIC StrSep
- ENTRADA
-
- LDS SI,Str1
- LES DI,Str2
- XOR BL,BL
- MOV ES:[DI],BL
- MOV AH,Sep
- @@1: MOV AL,[SI]
- OR AL,AL
- JZ @@5
- CMP AL,AH
- JZ @@2
- INC SI
- JMP @@1
- @@2: MOV [SI],BL
- INC SI
- @@3: LODSB
- OR AL,AL
- JZ @@5
- CMP AL,32
- JE @@3
- @@4: STOSB
- OR AL,AL
- JZ @@5
- LODSB
- JMP @@4
- @@5:
- SALIDA
- StrSep ENDP
-
- PrNum1 PROC NEAR
- XOR DX,DX
- DIV CX
- OR AL,AL
- JNE PrNum2
- OR BL,BL
- JE PrNum3
- PrNum2: MOV BL,1
- ADD AL,'0'
- STOSB
- PrNum3: MOV AX,DX
- RET
- PrNum1 ENDP
-
- IntToSt PROC C String: DWORD, Num: WORD
- PUBLIC IntToSt
- PUSH DI
-
- CLD
- LES DI,String
- MOV CX,Num
- OR CX,CX
- JGE @@1
- MOV AL,'-'
- STOSB
- NEG CX
- @@1: MOV AX,CX
- XOR BL,BL
- MOV CX,10000
- CALL PrNum1
- MOV CX,1000
- CALL PrNum1
- MOV CX,100
- CALL PrNum1
- MOV CX,10
- CALL PrNum1
- ADD AL,'0'
- XOR AH,AH
- STOSW
-
- POP DI
- RET
- IntToSt ENDP
-
- StToInt PROC C Cad: DWORD, Num: DWORD
- PUBLIC StToInt
- PUSH DS
- PUSH SI
-
- CLD
- XOR CX,CX
- MOV BL,CL
- LDS SI,Cad
- LODSB
- OR AL,AL
- JZ @@2
- CMP AL,'-'
- JNE @@1
- INC BL
- LODSB
- OR AL,AL
- JZ @@3
- @@1: SUB AL,'0'
- CMP AL,9
- JA @@3
- MOV BH,AL
- MOV AX,10
- MUL CX
- TEST AH,80H
- JNZ @@3
- OR DX,DX
- JNZ @@3
- MOV CX,AX
- MOV AL,BH
- XOR AH,AH
- ADD CX,AX
- LODSB
- OR AL,AL
- JNZ @@1
- @@2: MOV AX,1
- OR BL,BL
- JZ @@4
- NEG CX
- JMP SHORT @@4
- @@3: XOR AX,AX
- MOV CX,AX
- @@4: LDS SI,Num
- MOV [SI],CX
-
- POP SI
- POP DS
- RET
- StToInt ENDP
-
- IntValido PROC C Cad: DWORD, Num: DWORD, Min: WORD, Max: WORD
- PUBLIC IntValido
- CALL StToInt C, Cad, Num
- OR AL,AL
- JZ @@2
- PUSH DI
- LES DI,Num
- MOV CX,ES:[DI]
- POP DI
- CMP CX,Min
- JL @@1
- CMP CX,Max
- JLE @@2
- @@1: XOR AX,AX
- @@2: RET
- IntValido ENDP
-
-
- Separa PROC NEAR
- MOV BX,ES
- OR BX,DI
- JZ @@3
- Separa1 LABEL NEAR
- @@1: LODSB
- CMP AL,','
- JZ @@2
- STOSB
- OR AL,AL
- JZ @@3
- JMP @@1
- @@2: XOR AL,AL
- STOSB
- INC AL
- @@3: RET
- Separa ENDP
-
- SeparaParam PROC C Orig:DWORD, Par1:DWORD, Par2:DWORD, Par3:DWORD
- PUBLIC SeparaParam
- ENTRADA
-
- CLD
- XOR AL,AL
- LES DI,Par2
- MOV BX,ES
- OR BX,DI
- JZ @@0
- STOSB
- @@0: LES DI,Par3
- MOV BX,ES
- OR BX,DI
- JZ @@1
- STOSB
- @@1: LES DI,Par1
- LDS SI,Orig
- STOSB
- DEC DI
- CALL Separa1
- JZ @@4
- LES DI,Par2
- CALL Separa
- JZ @@4
- LES DI,Par3
- CALL Separa
-
- @@4: SALIDA
- SeparaParam ENDP
-
- Mayusculas PROC C Cad: DWORD
- PUBLIC Mayusculas
- ENTRADA
-
- XOR BX,BX
- LES DI,Cad
- LDS SI,Cad
- CLD
- @@1: LODSB
- CMP AL,32
- JZ @@1
- OR AL,AL
- JZ @@3
- INC BX
- CMP AL,'a'
- JB @@2
- CMP AL,'z'
- JA @@2
- SUB AL,'a'-'A'
- @@2: STOSB
- JMP @@1
- @@3: MOV AX,BX
-
- SALIDA
- Mayusculas ENDP
-
- LongStr PROC C Orig: DWORD
- PUBLIC LongStr
- LES BX,Orig
- XOR AX,AX
- @@1: CMP BYTE PTR ES:[BX],0
- JZ @@2
- INC AX
- INC BX
- JMP @@1
- @@2: RET
- LongStr ENDP
-
- GetDirStr PROC C Direc: DWORD
- PUBLIC GetDirStr
- LES BX,Orig
- @@0: MOV CX,BX
- @@1: MOV AL,ES:[BX]
- INC BX
- OR AL,AL
- JZ @@2
- CMP AL,'\'
- JNZ @@1
- JMP @@0
- @@2: MOV BX,CX
- MOV BYTE PTR ES:[BX],0
- RET
- GetDirStr ENDP
-
- END
-